package com.itguigu.glimail.order;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * 使用rabbitmq
 * 引入amqp场景 RabbitAutoConfiguration就会生效
 * 容器中配置了
 * RabbirMqTemplate AmqpAdmin  CachingConnectionFactory RabbitMessagingTemplate组件
 * 所有的属性都是spring. rabbitmq(配置文件中)
 *  @ConfigurationProperties(prefix = "spring.rabbitmq")
 *  public class RabbitProperties
 *  给配置文件中配置spring.rabbitmq
 *  * 3.给配置文件中配置spring. rabbitmq信息
 * * 4、@EnableRabbit: @EnablexXxxxx; 开启功能
 * .5、监听消息:使用@Rabbitlistener; 必须有@EnableRabbit
 * @Rabbitlistener:类+方法上(监听哪些队列即可
 * 本
 * @RabbitHandler:标在方法上(重载区分不同的消息)
 * *
 * ** 3.给配置文件中配置spring. rabbitmq信息
 * * 4、@EnableRabbit: @EnablexXxxxx; 开启功能
 * .5、监听消息:使用@Rabbitlistener; 必须有@EnableRabbit
 * @Rabbitlistener:类+方法上(监听哪些队列即可
 * 本
 * @RabbitHandler:标在方法上(重载区分不同的消息)
 * *
 * *
 * @@EnableRabbit
 *   /**
 *      * 解决:
 *      * 0)、导入spring-boot-starter-aop
 *      * 1)、@EnableTransactionManagement(proxyTargetClass= true)
 *      * 2)、@EnableAspectAutoProxy(exposeProxy=true)
 *      * 3)、AopContext.currentProxy() 调用方法
 *      *
 *      * 1
 *
 *
 *
 *
 *      *本地事务失效问题
 * *同一个对象内事务方法互调默认失效。原因绕过了代理对象,事务使用代理对象来控制的
 * *解决:使用代理对象来调用事务方法
 * *
 * 1)、引入aop-starter;spring-boot-starter-aop;引入了aspectj
 * 2)、@EnableAspectJAutoProxy; 开启aspectj动态代理功能。以后所有的动态代理都是aspectj创建的(即使没有接口也可以创建动态代理)
 *      */

/**
 * seata控制分布式事务
 * Seata控制分布式事务
 * 1)、每一个微服务先必须创建undo_ log;
 * 2)、安装事务协调器; seata-server:  https://github.com/seata/seata/releases
 * 3)、3)、整合
 * 1、导入依赖spring-cloud-starter-alibaba-seata seato-all-0.7.1
 * 2、解压并启动seata-server;
 * registry.conf:注册中心配置，修改registry type=nacos
 * file. conf: .
 * 3、所有想要用到分布式事务的微服务使用seata DataSourceProxy代理 自己的数据源
 * 3、所有想要用到分布式事务的微服务使用seata DataSourceProxy代理 自己的数据源
 * 4、每个微服务，都必须导入
 * registry. conf
 * file.conf vgroup. mapping. {application. name}-fescar-service-group = "default"
 */

@EnableAspectJAutoProxy(exposeProxy = true)//对外暴露代理对象
@EnableRabbit
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class GlimailOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GlimailOrderApplication.class, args);
    }

}
